home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 December
/
CHIP Aralık 1996.iso
/
prog
/
ra250
/
struct.250
< prev
next >
Wrap
Text File
|
1995-11-09
|
33KB
|
940 lines
(* Developers notes and Turbo Pascal structures for RemoteAccess 2.50 GAMMA
Copyright (c) 1996 Andrew Milner & Wantree Development
All Rights Reserved
If you develop software which accesses any of the following files,
you should read the following notes. They refer to important
structure changes in this release.
MESSAGES.RA
FILES.RA
MGROUPS.RA
FGROUPS.RA
The area number to which records in the above files refer is no
longer dependent upon the position of the record in the file.
This is to allow utilities to move, copy, insert and delete
areas and groups at will, without the need to renumber every
reference to every moved area or group.
The following applies to the record structure of all the above
files as published in this document.
If you look at each record definition, you will notice that the
MESSAGErecord and FILESrecord structures each have 4 unused
bytes at the beginning, and that the GROUPrecord structure has 2
unused bytes at the beginning.
In RA 2.50, the first two bytes of each of these records are
redefined as a single word value (2 byte unsigned integer). This
word holds the area number of that record - the name of the new
field is 'AreaNum'. This has the following implications:
1. To get the Hudson message-base board number for a record from
MESSAGES.RA, do NOT rely on its position. The AreaNum field
contains the actual board number.
2. To access the correct FDB files from a file area record in
FILES.RA, use the value contained in the AreaNum field, NOT the
number of the position of the record.
3. Utilities are now free to move any record to any location in
these files without having to worry about renumbering FDB files
or menu entries.
4. When ADDING a new record, utilities MUST assign a valid area
number to the record in the AreaNum field. Valid numbers are in
the range 1 to 65535, and MUST be unique. See the note about
index files below for information on how to determine the next
available unique number.
The INDEX files
---------------
In order to provide the fastest possible access to the above four
files, each is now indexed. The index files have the same path
and base name with an extension of 'RDX' - for example, the index
file for C:\RA\FILES.RA would be C:\RA\FILES.RDX.
The index files are automatically generated by RACONFIG after
editing areas. They must also be generated by any utility which:
1. Adds, deletes or moves a record within its file, or
2. Changes the AreaNum field of any record.
FAILURE TO REINDEX WILL CAUSE UNPREDICTABLE RESULTS FOR THE
SYSOP! RA and its utilities all check to make sure that the index
files are up to date.
The format of the index files is very simple. It is a flat file
of word (2 byte unsigned integer) records which contains one
record for each AreaNum value in the corresponding file. The
physical position of each index record is equal to the AreaNum
value minus 1. The value of the index record is equal to the
physical position of the record for that area number in the main
file PLUS 1. A value of zero indicates that the area number is
not currently used.
For example:
File offest FILES.RA AreaNum FILES.RDX record value
0 1 1
1 2 2
2 10 0
3 11 0
4 12 0
5 13 0
6 - 0
7 - 0
8 - 0
9 - 3
10 - 4
11 - 5
12 - 6
In the above example table, to look up the correct record in
FILES.RA for a particular area number, the code might look
something like this in Pascal:
Seek(RDX, AreaNum-1);
Read(RDX, Index);
Seek(FILESRA, Index-1);
Read(FILESRA, FILESRAinfo);
Determining the next free unique area number is a simple matter
of scanning the index file until a value of zero is encountered.
*)
type
AskType = (Yes, No, Ask, Only);
VideoType = (Auto, Short, Long);
MsgType = (LocalMail, NetMail, EchoMail, Internet, Newsgroup);
MsgKindsType = (Both, Private, Public, ROnly, NoReply);
OrphanType = (Ignore, Create, Kill);
FlagType = array[1..4] of Byte;
ResetType = (Never, Week, Month, Year);
Time = String[5];
Date = String[8];
LongDate = String[9];
ByteArray32 = Array[1..32] of Byte;
NetAddress = record
Zone,
Net,
Node,
Point : Word;
end;
LIMITSrecord = record
Security,
Ltime,
L300,
L1200,
L2400,
L4800,
L7200,
L9600,
L12000,
L14400,
L16800,
L19200,
L38400,
Llocal,
RatioNum,
RatioK : Word;
PerMinCost : Real;
L21600,
L24000,
L26400,
L28800,
L57600,
L64000 : Word;
FlexiTime : Real;
LsessionTime : Word;
ResetAmt : Word;
ResetPeriod : ResetType;
ResetOffset : Word;
L31200,
L33600 : Word;
FreeSpace : Array[1..13] of Byte;
end;
LANGUAGErecord = record
Name : String[20];
Attribute : Byte;
DefName,
MenuPath,
TextPath,
QuesPath : String[60];
Security : Word;
Flags,
NotFlagsMask : FlagType;
FreeSpace : Array[1..190] of Byte;
end;
MSGINFOrecord = record
LowMsg,
HighMsg,
TotalMsgs : Word;
TotalOnBoard : array[1..200] of Word;
end;
HMBMSGIDXrecord = record
MsgNum : Integer;
Board : Byte;
end;
MSGTOIDXrecord = String[35];
HMBMSGHDRrecord= record
MsgNum : Integer;
PrevReply,
NextReply,
TimesRead : Word;
StartBlock : Word;
NumBlocks,
DestNet,
DestNode,
OrigNet,
OrigNode : Word;
DestZone,
OrigZone : Byte;
Cost : Word;
MsgAttr,
NetAttr,
Board : Byte;
PostTime : Time;
PostDate : Date;
WhoTo,
WhoFrom : MSGTOIDXrecord;
Subject : String[72];
end;
MSGTXTrecord = String[255];
USERONrecord = record
Name,
Handle : MSGTOIDXrecord;
Line : Byte;
Baud : Word;
City : String[25];
Status,
Attribute : Byte;
StatDesc : String[10];
FreeSpace : Array[1..98] of Byte;
NoCalls : Word;
end;
{ Status byte - 0 : Browsing (in a menu)
1 : Uploading/downloading
2 : Reading/posting messages
3 : In a door/external utility
4 : Chatting with sysop
5 : Answering questionnaire
6 : RTC
7 : New user logon
255 : User-defined - display StatDesc
Attribute - Bit 0 : Hidden
1 : Wants chat
2 : Reserved for RANETMGR
3 : Do not disturb flag
6 : Ready (0=busy) }
LASTCALLrecord = record
Line : Byte;
Name,
Handle : MSGTOIDXrecord;
City : String[25];
Baud : Word;
Times : LongInt;
LogOn : String[5];
LogOff : String[5];
Attribute : Byte;
end;
{ Attribute - Bit 0 : Hidden }
FILESHDRrecord = record
Name : String[12];
Size,
CRC32 : LongInt;
Uploader : String[35];
UploadDate,
FileDate,
LastDL : LongInt;
TimesDL : Word;
Attrib : Byte;
Password : String[15];
KeyWord : Array[1..5] of String[15];
Cost : Word;
LongDescPtr : LongInt;
FreeSpace : Array[1..20] of Byte;
end;
{Attrib - Bit 0 : Deleted
1 : Unlisted
2 : Free (don't adjust ratio) - Does NOT affect "Cost"
3 : Not available (don't allow downloads)
4 : Locked (no kill)
5 : Missing/offline
6 : No time restrictions - always allow DL
}
FILESIDXrecord = record
Name : String[12];
UploadDate : LongInt;
KeyWordCRC : Array[1..5] of LongInt;
LongDescPtr : LongInt;
end;
LASTREADrecord = array[1..200] of Word;
USERSIDXrecord = record
NameCRC32,
HandleCRC32 : LongInt;
end;
COMBINEDrecord = array[1..200] of Word;
USERSrecord = record
Name : MSGTOIDXrecord;
Location : String[25];
Organisation,
Address1,
Address2,
Address3 : String[50];
Handle : String[35];
Comment : String[80];
PasswordCRC : LongInt;
DataPhone,
VoicePhone : String[15];
LastTime : Time;
LastDate : Date;
Attribute,
{ Bit 0 : Deleted
1 : Clear screen
2 : More prompt
3 : ANSI
4 : No-kill
5 : Xfer priority
6 : Full screen msg editor
7 : Quiet mode }
Attribute2 : Byte;
{ Bit 0 : Hot-keys
1 : AVT/0
2 : Full screen message viewer
3 : Hidden from userlist
4 : Page priority
5 : No echomail in mailbox scan
6 : Guest account
7 : Post bill enabled }
Flags : FlagType;
Credit,
Pending : LongInt;
MsgsPosted,
Security : Word;
LastRead,
NoCalls,
Uploads,
Downloads,
UploadsK,
DownloadsK,
TodayK : LongInt;
Elapsed : Integer;
ScreenLength : Word;
LastPwdChange : Byte;
Group : Word;
CombinedInfo : COMBINEDrecord;
FirstDate,
BirthDate,
SubDate : Date;
ScreenWidth,
Language,
DateFormat : Byte;
ForwardTo : String[35];
MsgArea,
FileArea : Word;
DefaultProtocol: Char;
FileGroup : Word;
LastDOBCheck : Byte;
Sex : Byte;
XIrecord : LongInt;
MsgGroup : Word;
Attribute3 : Byte;
{ Bit 0 : Mailbox check: scan selected areas only }
Password : String[15];
FreeSpace : Array[1..31] of Byte;
end;
USERSXIrecord = record
FreeSpace : Array[1..200] of Byte;
end;
SYSINFOrecord = record
TotalCalls : LongInt;
LastCaller,
LastHandle : MSGTOIDXrecord;
ExtraSpace : array[1..92] of Byte;
end;
TIMELOGrecord = record
StartDate : Date;
BusyPerHour : array[0..23] of Word;
BusyPerDay : array[0..6] of Word;
end;
MNUrecord = record
Typ : Byte;
Security,
MaxSec : Word;
NotFlagsMask,
Flags : FlagType;
TimeLeft,
TimeUsed : Word;
Age,
TermAttrib : Byte;
{Bit 0 : ANSI
1 : AVT
2 : RIP}
MinSpeed,
MaxSpeed,
Credit,
OptionCost,
PerMinCost : LongInt;
Node,
Group : ByteArray32;
StartTime,
StopTime : Array[1..7] of Word;
Display : String[135];
HotKey : String[8];
MiscData : String[135];
Foreground,
Background : Byte;
FreeSpace : Array[1..50] of Byte;
end;
EVENTrecord = record
Status : Byte; { 0=Deleted 1=Enabled 2=Disabled }
StartTime : Time;
ErrorLevel : Byte;
Days : Byte;
Forced : Boolean;
LastTimeRun : Date;
end;
EVENTrecordArray = array[1..20] of EVENTrecord;
MESSAGErecord = record
AreaNum,
Unused : Word;
Name : String[40];
Typ : MsgType;
MsgKinds : MsgKindsType;
Attribute : Byte;
{ Bit 0 : Enable EchoInfo
1 : Combined access
2 : File attaches
3 : Allow aliases
4 : Use SoftCRs as characters
5 : Force handle
6 : Allow deletes
7 : Is a JAM area }
DaysKill, { Kill older than 'x' days }
RecvKill : Byte; { Kill recv msgs, recv for more than 'x' days }
CountKill : Word;
ReadSecurity : Word;
ReadFlags,
ReadNotFlags : FlagType;
WriteSecurity : Word;
WriteFlags,
WriteNotFlags : FlagType;
SysopSecurity : Word;
SysopFlags,
SysopNotFlags : FlagType;
OriginLine : String[60];
AkaAddress : Byte;
Age : Byte;
JAMbase : String[60];
Group : Word;
AltGroup : Array[1..3] of Word;
Attribute2 : Byte;
{ Bit 0 : Include in all groups }
NetmailArea : Word;
FreeSpace2 : Array[1..7] of Byte;
end;
GROUPrecord = record
AreaNum : Word;
Name : String[40];
Security : Word;
Flags,
NotFlagsMask : FlagType;
FreeSpace : Array[1..100] of Byte;
end;
FILESrecord = record
AreaNum,
Unused : Word;
Name : String[40];
Attrib : Byte;
{ Bit 0 : Include in new files scan
1 : Include in upload dupe scan
2 : Permit long descriptions
3 : Area is on CD-ROM
4 : All files are FREE
5 : Allow DLs not in FDB
6 : Allow users to password uploads
7 : Scan uploads }
FilePath : String[40];
KillDaysDL,
KillDaysFD : Word;
Password : String[15];
MoveArea : Word;
Age,
ConvertExt : Byte;
Group : Word;
Attrib2 : Byte;
{ Bit 0 : Include in all groups }
DefCost,
UploadArea,
UploadSecurity : Word;
UploadFlags,
UploadNotFlags : FlagType;
Security : Word;
Flags,
NotFlags : FlagType;
ListSecurity : Word;
ListFlags,
ListNotFlags : FlagType;
AltGroup : Array[1..3] of Word;
Device : Byte;
FreeSpace : Array[1..13] of Byte;
end;
CONFrecord = record
Name,
Parent : String[8];
Desc : String[70];
Attr : Byte;
{ Bit 0 : Private
1 : Unlisted
2 : Global
3 : Permanent
4 : Use handles
}
Moderator : String[35];
Language : String[20];
Password : String[15];
Security : Word;
Flags : FlagType;
NumNodes : Byte;
Active : Array[1..250] of Byte;
Child : Array[1..250] of Boolean;
NotFlagsMask : FlagType;
FreeSpace : Array[1..96] of Byte;
end;
MODEMrecord = record
ComPort,
InitTries : Byte;
BufferSize,
ModemDelay : Word;
MaxSpeed : LongInt;
SendBreak,
LockModem,
AnswerPhone,
OffHook : Boolean;
InitStr,
InitStr2,
BusyStr : String[70];
InitResp,
BusyResp,
Connect300,
Connect1200,
Connect2400,
Connect4800,
Connect7200,
Connect9600,
Connect12k,
Connect14k,
Connect16k,
Connect19k,
Connect38k,
ConnectFax : String[40];
RingStr,
AnswerStr : String[20];
ErrorFreeString : String[15];
Connect21k,
Connect24k,
Connect26k,
Connect28k,
Connect57k,
Connect64k : String[40];
Connect31k,
Connect33k : String[40];
FreeSpace : Array[1..100] of Byte;
end;
ARCrecord = record
Extension : String[3];
UnpackCmd,
PackCmd : String[60];
end;
CONFIGrecord = record
VersionID : Word;
xCommPort : Byte;
xBaud : LongInt;
xInitTries : Byte;
xInitStr,
xBusyStr : String[70];
xInitResp,
xBusyResp,
xConnect300,
xConnect1200,
xConnect2400,
xConnect4800,
xConnect9600,
xConnect19k,
xConnect38k : String[40];
xAnswerPhone : Boolean;
xRing,
xAnswerStr : String[20];
xFlushBuffer : Boolean;
xModemDelay : Integer;
MinimumBaud,
GraphicsBaud,
TransferBaud : word;
SlowBaudTimeStart,
SlowBaudTimeEnd,
DownloadTimeStart,
DownloadTimeEnd : Time;
PageStart : Array[0..6] of Time;
PageEnd : Array[0..6] of Time;
SeriNum,
CustNum : String[22];
{} FreeSpace1 : Array[1..24] of Byte;
PwdExpiry : Word;
MenuPath,
TextPath,
AttachPath,
NodelistPath,
MsgBasePath,
SysPath,
ExternalEdCmd : String[60];
Address : Array[0..9] of NetAddress;
SystemName : String[30];
NewSecurity : Word;
NewCredit : Word;
NewFlags : FlagType;
OriginLine : String[60];
QuoteString : String[15];
Sysop : String[35];
LogFileName : String[60];
FastLogon,
AllowSysRem,
MonoMode,
StrictPwdChecking,
DirectWrite,
SnowCheck : Boolean;
CreditFactor : Integer;
UserTimeOut,
LogonTime,
PasswordTries,
MaxPage,
PageLength : Word;
CheckForMultiLogon,
ExcludeSysopFromList,
OneWordNames : Boolean;
CheckMail : AskType;
AskVoicePhone,
AskDataPhone,
DoFullMailCheck,
AllowFileShells,
FixUploadDates,
FreezeChat : Boolean;
ANSI, { ANSI: Yes, no, or ask new users }
ClearScreen, { Clear: " }
MorePrompt : AskType; { More: " }
UploadMsgs : Boolean;
KillSent : AskType; { Kill/Sent " }
CrashAskSec : Word; { Min sec# to ask 'Crash Mail ?' }
CrashAskFlags : FlagType;
CrashSec : Word; { Min sec# to always send crash mail. }
CrashFlags : FlagType;
FAttachSec : Word; { " ask 'File Attach ?' }
FAttachFlags : FlagType;
NormFore,
NormBack,
StatFore,
StatBack,
HiBack,
HiFore,
WindFore,
WindBack,
ExitLocal,
Exit300,
Exit1200,
Exit2400,
Exit4800,
Exit9600,
Exit19k,
Exit38k : Byte;
MultiLine : Boolean;
MinPwdLen : Byte;
MinUpSpace : Word;
HotKeys : AskType;
BorderFore,
BorderBack,
BarFore,
BarBack,
LogStyle,
MultiTasker,
PwdBoard : Byte;
xBufferSize : Word;
FKeys : Array[1..10] of String[60];
WhyPage : Boolean;
LeaveMsg : Byte;
ShowMissingFiles,
xLockModem : Boolean;
{} FreeSpace2 : Array[1..10] of Byte;
AllowNetmailReplies : Boolean;
LogonPrompt : String[40];
CheckNewFiles : AskType;
ReplyHeader : String[60];
BlankSecs : byte;
ProtocolAttrib : Array[1..6] of Byte;
xErrorFreeString : String[15];
xDefaultCombined : array[1..25] of Byte;
RenumThreshold : Word;
LeftBracket,
RightBracket : Char;
AskForHandle : Boolean;
AskForBirthDate : Boolean;
GroupMailSec : Word;
ConfirmMsgDeletes : Boolean;
FreeSpace4 : Array[1..30] of byte;
TempScanDir : String[60];
ScanNow : AskType;
xUnknownArcAction,
xFailedUnpackAction,
FailedScanAction : Byte; {Bit 0:Mark deleted, 1:Mark unlisted, 2:Mark notavail}
xUnknownArcArea,
xFailedUnpackArea,
FailedScanArea : Word;
ScanCmd : String[60];
xDeductIfUnknown : Boolean;
NewUserGroup : Byte;
AVATAR : AskType;
BadPwdArea : Byte;
Location : String[40];
DoAfterAction : Byte; {0 = wait for CR, > 0 = wait for x seconds}
{} OldFileLine : String[40];
CRfore,
CRback : Byte;
LangHdr : String[40];
xSendBreak : Boolean;
{} ListPath : String[60];
FullMsgView : AskType;
EMSI_Enable : AskType;
EMSI_NewUser : Boolean;
EchoChar : String[1];
xConnect7200,
xConnect12000,
xConnect14400 : String[40];
Exit7200,
Exit12000,
Exit14400 : Byte;
ChatCommand : String[60];
ExtEd : AskType;
NewuserLanguage : Byte;
LanguagePrompt : String[40];
VideoMode : VideoType;
AutoDetectANSI : Boolean;
xOffHook : Boolean;
NewUserDateFormat : Byte;
KeyboardPwd : String[15];
CapLocation : Boolean;
NewuserSub : Byte;
PrinterName : String[4];
HilitePromptFore,
HiLitePromptBack : Byte;
xInitStr2 : String[70];
AltJSwap : Boolean;
SemPath : String[60];
AutoChatCapture : Boolean;
FileBasePath : String[60];
NewFileTag : Boolean;
IgnoreDupeExt : Boolean;
TempCDFilePath : String[60];
TagFore,
TagBack : Byte;
xConnect16k : String[40];
Exit16k,
FilePayback : Byte;
FileLine,
FileMissingLine : String[200];
NewUserULCredit : Byte;
NewUserULCreditK : Word;
ArcInfo : Array[1..10] of ARCrecord;
RAMGRAltFKeys : Array[1..5] of String[60];
ArcViewCmd : String[60];
xConnectFax : String[40];
ExitFax : Byte;
UseXMS,
UseEMS : Boolean;
CheckDOB : Byte;
EchoCheck : AskType;
ccSec,
ReturnRecSec : Word;
HonourNetReq : Boolean;
DefaultCombined : COMBINEDrecord;
AskForSex,
AskForAddress : Boolean;
DLdesc : AskType;
NewPhoneScan : Boolean;
Exit21k,
Exit24k,
Exit26k,
Exit28k,
Exit57k,
Exit64k : Byte;
TagLogoffWarning,
LimitLocal,
SavePasswords : Boolean;
BlankLogins : Byte;
ripiconpath : string[60];
Exit31k,
Exit33k : Byte;
IncludeNewCDareas : Boolean;
FutureExpansion : Array[1..513] of Byte;
end;
EXITINFOrecord = record
Baud : Word;
SysInfo : SYSINFOrecord;
TimeLogInfo : TIMELOGrecord;
UserInfo : USERSrecord;
EventInfo : EVENTrecord;
NetMailEntered,
EchoMailEntered : Boolean;
LoginTime : Time;
LoginDate : Date;
TimeLimit : Word;
LoginSec : LongInt;
UserRecord : Integer;
ReadThru,
NumberPages,
DownloadLimit : Word;
TimeOfCreation : Time;
LogonPasswordCRC : LongInt;
WantChat : Boolean;
DeductedTime : Integer;
MenuStack : Array[1..50] of String[8];
MenuStackPointer : Byte;
UserXIinfo : USERSXIrecord;
ErrorFreeConnect,
SysopNext : Boolean;
EMSI_Session : Boolean; { These fields hold }
EMSI_Crtdef, { data related to an }
EMSI_Protocols, { EMSI session }
EMSI_Capabilities,
EMSI_Requests,
EMSI_Software : String[40];
Hold_Attr1,
Hold_Attr2,
Hold_Len : Byte;
PageReason : String[80];
StatusLine : Byte;
LastCostMenu : String[8];
MenuCostPerMin : Word;
DoesAVT,
RIPmode : Boolean;
RIPVersion : Byte;
ExtraSpace : Array[1..85] of Byte;
end;
PROTOCOLrecord = record
Name : String[15];
ActiveKey : Char;
OpusTypeCtlFile,
BatchAvailable : Boolean;
Attribute : Byte; { 0=Disabled, 1=Enabled }
LogFileName,
CtlFileName,
DnCmdString,
DnCtlString,
UpCmdString,
UpCtlString : String[80];
UpLogKeyword,
DnLogKeyword : String[20];
XferDescWordNum,
XferNameWordNum : Byte;
end;